package com.example.basic.web.service.pharmIn;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.basic.web.model.pharmIn.PharmInRecord;
import com.example.basic.web.response.InPharmResponse;
import com.example.basic.web.response.report.InOutRecordResponse;

import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author suntt
 * @since 2019-10-29
 */
public interface PharmInRecordService {


    /**
     * 新增入库单
     * @param pharmInRecord 实体
     * @return
     */
    PharmInRecord add(PharmInRecord pharmInRecord);

    /**
     * 通过通知单查询入库单
     * @param inNoticeCode 通知单编码
     * @return
     */
    PharmInRecord queryByNoticeCode(String inNoticeCode);

    /**
     * 删除
     * @param inPharmCode 入库单编码
     */
    Boolean remove(String inPharmCode);

    /**
     * 入库单列表
     *
     * @param queryPage   分页
     * @param searchParam 遗体名称，拼音码，五笔码
     * @param sex         性别
     * @param pharmCode   库房编码
     * @param zoneCode    分区编码
     * @param depotCode   库位编码
     * @param status      状态
     * @param beginTime 开始日期
     * @param endTime 结束日期
     * @return
     */
    IPage<InPharmResponse> queryList(Page<InPharmResponse> queryPage, String searchParam, String sex, String pharmCode, String zoneCode, String depotCode, String status, String beginTime, String endTime);

    /**
     * 出入库记录查询
     * @param queryPage 分页
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param pharmCode 库房编码 0-全部
     * @param zoneCode 分区编码 0-全部
     * @param depotCode 库位编码 0-全部
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param type 出入库类型 0-全部
     * @return
     */
    IPage<InOutRecordResponse> queryInOutRecord(Page<InOutRecordResponse> queryPage, String searchParam, String pharmCode, String zoneCode, String depotCode, String beginTime, String endTime, String type);

    /**
     * 出入库记录统计
     *
     * @param searchParam 仓库编码
     * @param pharmCode   仓库编码
     * @param zoneCode    分区编码
     * @param depotCode 库位编码
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param type 类型
     * @return
     */
    Map InOutRecordCount(String searchParam, String pharmCode, String zoneCode, String depotCode, String beginTime, String endTime, String type);

    /**
     * 入库
     * @param inPharmCode 入库单编码
     */
    Boolean inPharm(String inPharmCode);

    /**
     * 入库单状态更新
     * @param inPharmCode 入库单编码
     * @return
     */
    Boolean modifyStatus(String inPharmCode);

    /**
     * 入库单详情
     * @param inPharmCode 入库单编码
     * @return
     */
    PharmInRecord detail(String inPharmCode);

    /**
     * 更新入库单
     * @param pharmInRecord
     * @return
     */
    PharmInRecord update(PharmInRecord pharmInRecord);
}